¿Existe una sintaxis de expresiones regulares equivalente a "debe contener un carácter fuera de este rango dado"?
Por ejemplo, si quiero hacer coincidir cualquier cadena que contenga un carácter que no sea ninguno de estos: 1,a,@
...pero también puede contener los caracteres en el rango?
Ejemplos:
1111 - No coincidiría
11a@ - No coincidiría
1a@b - Coincidiría
cdef - Coincidiría
Pensé que tal vez (?=.*[^1a@]) funcionaría, pero nada.
En lugar de usar una búsqueda anticipada, podría hacer coincidir al menos una única aparición de [^1a@] en la cadena.
Tenga en cuenta que [^1a@] también puede coincidir con una nueva línea o un espacio.
^.*?[^1a@\r\n].*$Vea una demostración de expresiones regulares .
Si no desea hacer coincidir solo espacios, use \s en la clase de caracteres negados [^1a@\s] para excluir un carácter de espacio en blanco que solo sea una coincidencia válida.
Ejemplo obteniendo el partido completo:
const regex = /^.*?[^1a@\r\n].*$/; ["1111", "11a@", "1a@b", "cdef"].forEach(s => { const m = s.match(regex); if (m) { console.log(s) } });Ejemplo de prueba si la cadena contiene algún carácter que no sea el enumerado en la clase de caracteres:
["1111", "11a@", "1a@b", "cdef"].forEach((s) => { if (/[^1a@]/.test(s)) { console.log(s); } });